class Solution {
public:
    string modifyString(string s) {
        for (int i = 0; i < s.size(); i ++ ) {
            if (!i) {
                if (s[i] == '?') {
                    if (i + 1 < s.size() && s[i + 1] == '?' || i + 1 >= s.size()) 
                        s[i] = 'a';
                    else if (i + 1 < s.size() && s[i + 1] != '?')
                        s[i] = (s[i + 1] - 'a' + 2) % 26 + 'a';
                }
            } else if (i < s.size() - 1) {
                if (s[i] == '?' && s[i + 1] != '?') {
                    s[i] = (max(s[i - 1] - 'a', s[i + 1] - 'a') + 2) % 26 + 'a';
                    if (s[i] == s[i - 1] || s[i] == s[i + 1]) 
                        s[i] = (s[i] - 'a' + 2) % 26 + 'a';
                }
                else if (s[i] == '?' && s[i + 1] == '?')
                    s[i] = (s[i - 1] - 'a' + 2) % 26 + 'a';
            } else {
                if (s[i] == '?') 
                    s[i] = (s[i - 1] - 'a' + 2) % 26 + 'a';
            }
        }
        
        return s;
    }
};
